#include "report.h"
u32 rec_message;
static u32 message;
void set_rec_message(u8 *buf)
{
    memcpy(&rec_message,buf,4);
}

u32 get_rec_message()
{
    u32 i;
    i=rec_message;
    rec_message=0;
    return i;
}

u32 get_message()
{
    u32 i;
    if (message == 0xffffffff)
    {
        message =0;
    }
    i=message;
    message++;
    return i;
}


void ACK_report()
{
    u16 num=0;
    u8 buf[1024];
    buf[0]=0xA5;
    memcpy(&buf[3],buf_device,16);
    num+=16;
    //MI
    u32 mess =get_rec_message();
    memcpy(&buf[19],&mess,4);
    num+=4;
    //指令码
    u32 code = ACK;
    memcpy(&buf[23],&code,4);
    num+=4;
    memcpy(&buf[1],&num,2);
    //CRC
    buf[27]=0;
    buf[28]=0;

    buf[29]=0x5a;
    TCP_send_data(buf,(num+1+1+2+2));
}

void heart_beat_handle()
{
    u8 heart_buffer[SIZE];
    u16 j=0;
    memcpy(&heart_buffer[1+2],buf_device,16);  //DN
    j +=16;
    u32 mess = get_message();
    memcpy(&heart_buffer[1+16+2],&mess,4);
    j +=4;
    u32 code = HEARTBEAT_PACKET;
    memcpy(&heart_buffer[1+16+2+4],&code,4);
    j +=4;
    memcpy(&heart_buffer[1],&j,sizeof(u16));

    j+= sizeof(u16);
    heart_buffer[0]= 0xA5;
    j +=1;
    heart_buffer[j] =0;
    j +=1;
    heart_buffer[j] =0;
    j +=1;
    heart_buffer[j] =0x5A;
    j +=1;
    TCP_send_data(heart_buffer,j);
}

void net_reset_report()
{
    u16 num=0;
    u8 buf[1024];
    buf[0]=0xA5;
    memcpy(&buf[3],buf_device,16);
    num+=16;
    //MI
    u32 mess =get_message();
    memcpy(&buf[19],&mess,4);
    num+=4;
    //指令码
    u32 code = NET_RESET;
    memcpy(&buf[23],&code,4);
    num+=4;
    memcpy(&buf[1],&num,2);
    //CRC
    buf[27]=0;
    buf[28]=0;

    buf[29]=0x5a;
    TCP_send_data(buf,(num+1+1+2+2));
}

void custom_save_report()
{
    u16 num=0;
    u8 buf[1024];
    buf[0]=0xA5;
    memcpy(&buf[3],buf_device,16);
    num+=16;
    //MI
    u32 mess =get_message();
    memcpy(&buf[19],&mess,4);
    num+=4;
    //指令码
    u32 code = CUSTOM_SAVE;
    memcpy(&buf[23],&code,4);
    num+=4;
    memcpy(&buf[1],&num,2);
    //CRC
    buf[27]=0;
    buf[28]=0;

    buf[29]=0x5a;
    TCP_send_data(buf,(num+1+1+2+2));
}

void send_register_package()
{   
    u16 num=0;
    u8 buf[1024];
    buf[0]=0xA5;
    memcpy(&buf[3],buf_device,16);
    num+=16;
    //MI
    u32 mess=get_message();
    memcpy(&buf[19],&mess,4);
    num+=4;
    //指令码
    memset(&buf[23],0,4);
    num+=4;
    //版本
    memcpy(&buf[27],PROD_VER,3);
    num+=3;
    memcpy(&buf[30],FW_VER,3);
    num+=3;
    //硬件地址
    buf[33]='1';
    buf[34]='2';
    buf[35]='3';
    buf[36]='4';
    buf[37]='5';
    buf[38]='6';
    num+=6;
    //密钥
    memcpy(&buf[41],SECRET,strlen(SECRET));
    num+=strlen(SECRET);
    u16 n =strlen(SECRET);
    memcpy(&buf[39],&n,2);
    num+=2;
    memcpy(&buf[1],&num,2);
    //CRC
    buf[47]=0;
    buf[48]=0;

    buf[49]=0x5a;
    TCP_send_data(buf,42);
}

void OTA_report()
{
    u16 num=0;
    u8 buf[1024];
    buf[0]=0xA5;
    memcpy(&buf[3],buf_device,16);
    num+=16;
    //MI
    u32 mess =get_message();
    memcpy(&buf[19],&mess,4);
    num+=4;
    //指令码
    int i=OTA;
    memcpy(&buf[23],&i,4);
    num+=4;
    memcpy(&buf[1],&num,2);
    //CRC
    buf[27]=0;
    buf[28]=0;

    buf[29]=0x5a;
    TCP_send_data(buf,(num+1+1+2+2));
}

void RGB_brighness_handle(u8 num)
{
    if(num <= 0x3F)
    {
        set_brighness_level(num);
    }
}

void main_mode_handle(u8 num)
{
    app_logic_set_ssp(num);
}